package org.example.demo;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;

public class HotSwapDemo {
    private static JFrame frame;
    private static JButton button;

    public static void main(String[] args) {
        frame = new JFrame("Swing热部署演示");
        frame.setSize(300, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        button = new JButton("点击测试热部署2");
        updateButtonListener(); // 初始化事件监听器

        frame.add(button);
        frame.setVisible(true);
    }

    // 动态更新按钮监听逻辑（此方法支持热替换）
    private static void updateButtonListener() {
        if (button.getActionListeners().length!=0){
            button.removeActionListener(Arrays.stream(button.getActionListeners()).findFirst().get()); // 移除旧监听器
        }
        button.addActionListener(e -> {
            // 修改此处逻辑后，通过热部署生效
            JOptionPane.showMessageDialog(frame, "原始消息: Hello JDK 1.82!");
        });
        refreshUI(); // 强制刷新UI
    }

    // 手动刷新UI组件（必须调用）
    private static void refreshUI() {
        SwingUtilities.invokeLater(() -> {
            frame.revalidate();
            frame.repaint();
        });
    }
}
